using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Collections.Generic;
/// <summary>
/// Summary description for Paginacion
/// </summary>
public class PaginacionBean
{
    
    public List<PaginaItemBean> listaNumeros;
    private Int64 totalRegistros;
    public Int64 paginaActual;
    public Int64 regitrosPorPagina = 10;
    public Int64 paginasParaMostrar = 5;

    public Boolean flagUltimo = true;
    public Boolean flagPrimero = true;
    public Boolean flagSiguiente = true;
    public Boolean flagAnterior = true;
    public String nombrePagina;
    public String paginaAncla;
    public Int64 paginaIzquierda = 1;
    public String buscarNombre="";
    public int buscarOrden;

    public PaginacionBean()
    {
        primero();
    }

    public void calcularNumeroMostrar()
    {
        listaNumeros = new List<PaginaItemBean>();

        Int64 final = getTotalPaginas();

        Int64 inicio = 1;

        if (PaginaItemBean.ES_ANCLA_IZQUIERDA.Equals(paginaAncla))
        {
            inicio = paginaIzquierda - paginasParaMostrar;
            paginaIzquierda = inicio;
        }
        else if (PaginaItemBean.ES_ANCLA_DERECHA.Equals(paginaAncla))
        {
            inicio = paginaActual;

            paginaIzquierda = paginaIzquierda + paginasParaMostrar - 1;

            if (paginaIzquierda != 1)
            {
                paginaIzquierda = paginaIzquierda + 1;
            }
             
        }
        //else if (BEnumero.ES_ANCLA_PRIMERA.Equals(paginaAncla))
       // {
          //  inicio = paginaActual;
          //  paginaIzquierda = paginaIzquierda + paginasParaMostrar - 1;
       //   
       // }
        else if (PaginaItemBean.ES_ANCLA_ULTIMA.Equals(paginaAncla))
        {
            Int64 valor = final % paginasParaMostrar;
            
            if (valor == 0)
            {
                inicio = final - paginasParaMostrar +1;
            }
            else
            {
                inicio = final - valor + 1;
            }

            paginaIzquierda = inicio;
        }
        else
        {
            //if (paginaIzquierda != 1){
             inicio = paginaIzquierda;
            //}
        }


        PaginaItemBean bean = new PaginaItemBean(1, true, nombrePagina);
        bean.isPrimero = true;
          bean._ancla = "";
        bean.paginaIzquierda = 1.ToString();
        bean.TotalPaginas = final.ToString();
        
        if (paginaActual == 1)
        {
            bean._Activo = false;
        }

        listaNumeros.Add(bean);

        if (inicio > 1)
        {
            bean = new PaginaItemBean(paginaIzquierda - 1, false, nombrePagina);
            bean._campoMostrar = "...";
           
            bean._ancla = PaginaItemBean.ES_ANCLA_IZQUIERDA;
            bean.paginaIzquierda = paginaIzquierda.ToString();
            bean.TotalPaginas = final.ToString( );
            listaNumeros.Add(bean);
            
        }


        Int64 i = 1;

        for ( i = inicio; i <= final && i <= paginasParaMostrar + inicio - 1; i++)
        {
            bean = new PaginaItemBean(i, false, nombrePagina);
            bean.paginaIzquierda =  paginaIzquierda.ToString();
            bean.TotalPaginas = final.ToString();
            
            if (paginaActual == i)
            {
                bean._Activo = true;
            }
            listaNumeros.Add(bean);
        }

        if (i <= final)
        {
            bean = new PaginaItemBean(i, false, nombrePagina);
            bean._campoMostrar = "...";
            bean._ancla = PaginaItemBean.ES_ANCLA_DERECHA;
            bean.paginaIzquierda = paginaIzquierda.ToString();
            bean.TotalPaginas = final.ToString();
            
            listaNumeros.Add(bean);
        }


        bean = new PaginaItemBean(final, true, nombrePagina);
        bean.isUltimo = true; 
        bean._ancla = "";
        bean.paginaIzquierda = paginaIzquierda.ToString();
        bean.TotalPaginas = final.ToString();
        
        listaNumeros.Add(bean);

        if (paginaActual == final || final == 0)
        {
            bean._Activo = false;
        }

    }

    public Int64 getTotalPaginas()
    {
        Int64 totalPaginas = totalRegistros / regitrosPorPagina;


        if (totalRegistros % regitrosPorPagina > 0)
        {
            totalPaginas = totalPaginas + 1;
        }

        return totalPaginas;
    }

    public void primero()
    {
        paginaActual = 1;

        flagPrimero = false;
        flagAnterior = false;
        flagSiguiente = true;
        flagUltimo = true;
        buscarOrden = 0;
    }

    public void ultimo()
    {
        paginaActual = getTotalPaginas();

        flagPrimero = true;
        flagAnterior = true;
        flagSiguiente = false;
        flagUltimo = false;
        
    }

    public void siguiente()
    {
        if (paginaActual < getTotalPaginas())
        {
            paginaActual = paginaActual + 1;
        }

        if (paginaActual == getTotalPaginas())
        {
            flagPrimero = true;
            flagAnterior = true;
            flagSiguiente = false;
            flagUltimo = false;
        }
        else
        {
            flagPrimero = true;
            flagAnterior = true;
            flagSiguiente = true;
            flagUltimo = true;
        }

    }

    public void irPagina(int pagina)
    {

        paginaActual = pagina;
 

        if (paginaActual == getTotalPaginas())
        {
            flagPrimero = true;
            flagAnterior = true;
            flagSiguiente = false;
            flagUltimo = false;
        }
        else if (paginaActual == 1)
        {
            flagPrimero = false;
            flagAnterior = false;
            flagSiguiente = true;
            flagUltimo = true;
        }
        else
        {
            flagPrimero = true;
            flagAnterior = true;
            flagSiguiente = true;
            flagUltimo = true;
        }

    }


    public void anterior()
    {
        if (paginaActual > 2)
        {
            paginaActual = paginaActual - 1;
        }

        if (paginaActual == 1)
        {
            flagPrimero = false;
            flagAnterior = false;
            flagSiguiente = true;
            flagUltimo = true;
        }
        else
        {
            flagPrimero = true;
            flagAnterior = true;
            flagSiguiente = true;
            flagUltimo = true;
        }
    }

    public void setTotalRegistros(List<AbstractBean> loLista)
    {
        if (loLista.Count > 0)
        {
            totalRegistros = Int64.Parse(loLista[0].tamaniototal);
        }
    }

    public void setTotalRegistros(String tamaniototal)
    {

        totalRegistros = tamaniototal != "" ? Int64.Parse(tamaniototal): 0;
    }

    public string getTotalRegistros( )
    {
            return totalRegistros.ToString() ;
     }

    public String getEstiloColumnaOrdenar(String nameColumn)
    {
        if (nameColumn == buscarNombre && buscarOrden == 0)
        {
            return "ordenarAbajo";
        }
        else if (nameColumn == buscarNombre && buscarOrden == 1)
        {
            return "ordenarArriba";
        }
        else return "";
    }
}
